package com.shrct.businessprocess.purchase;

import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.purchase.RCContractItemPromisedService;
import com.shrct.businessprocess.purchase.RCProductAndQuantity;
import com.shrct.businessprocess.purchase.RCdentifiableBudgetContractProductItem;
import com.shrct.businessprocess.purchase.impl.RCBudgetContractProductItemImpl;
import com.shrct.businessprocess.purchase.proxy.RCBudgetContractProductItemProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import java.util.Collection;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCBudgetContractProductItemImpl.class)
public interface RCBudgetContractProductItem extends RCdentifiableBudgetContractProductItem {
  public abstract Collection<RCContractItemPromisedService> getPromisedServices();
  
  public abstract RCContractItemPromisedService createAndAddtoPromisedServices();
  
  public abstract RCContractItemPromisedService createAndAddtoPromisedServices(final Procedure1<RCContractItemPromisedService> updater);
  
  public abstract RCBudgetContractProductItem removeFromPromisedServices(final RCContractItemPromisedService rCContractItemPromisedService);
  
  public abstract RCBudgetContractProductItem removeAllPromisedServices();
  
  public abstract RCContractItemPromisedService getDefaultPromisedService();
  
  public abstract RCProjectMoney getTotalServicePrice();
  
  public abstract Iterable<RCProductAndQuantity> getDeliverCandidates();
  
  public abstract Integer getDeliveredQuantity();
  
  public abstract RCBudgetContractProductItemProxy toProxy();
}
